01. Controls on the Crazyflie

Throughout the course, we've handled a variety of different levels of control of a drone, from commanding positions in the first project (Backyard Flyer) to commanding motor thrusts themselves in the third project (Controls). When it comes to real drones, you will come across interfaces that allow a varying level of control, meaning, you will come across drones that only open position control to the user, some that allow velocity control, and even some that allow acceleration control from "offboard" the drone, meaning not as part of the core control system. As an aside, the level of control used in the third project (motor thrusts) is typically only ever seen within the core controller of the drone itself, so odds are if you are writing code for that, you're working on the main control system itself!

When it comes to the Crazyflie, it opens up a couple levels of control for us to work with: velocity and attitude. In this optional lesson, we will go through and see how to apply the concepts you've learned in the controls section to build a lateral position, altitude, velocity and yaw controller for your Crazyflie, first using the velocity command API and then using the attitude command API.

Unfortunately, because the level of commands available to us are different than the simulator from the controls project, for the most part, we can't directly use that script to control the Crazyflie. However, we will be using the same concepts and a similar control structure.

Download the [github repo](https://github.com/udacity/FCND-Controls-Crazyflie) and let's get started!

NOTE: This lesson only works with Udacidrone version 0.3.5 or greater

Ref. Udacidrone